package com.opengroupe.service.admin;

import java.util.List;
import java.util.Set;

import org.springframework.dao.DataAccessException;
import org.springframework.transaction.annotation.Transactional;

import com.opengroupe.entities.Candidat;
import com.opengroupe.entities.CandidatReponseQuestion;
import com.opengroupe.entities.Categorie;
import com.opengroupe.entities.Question;
import com.opengroupe.util.QrhException;
import com.opengroupe.util.ResultatQuestionnaire;

/**
 * Ensemble des fonctionnalités nécessaires à l'administration de QRH
 * 
 */
public interface AdministrationService {
	
	/**
	 * Créer un candidat à partir des attributs suivants : 
	 * @param nomCandidat
	 * @param prenomCandidat
	 * @param telCandidat
	 * @param emailCandidat
	 * @throws {@link DataAccessException}
	 * @return {@link Candidat} 
	 */
	public Candidat creerCandidat(String nomCandidat, String prenomCandidat,
			String telCandidat, String emailCandidat) throws DataAccessException;
	
	
	public Question creerQuestion(Question question);

	/**
	 * Permet d'affecter une categorie de questions à un candidat
	 * @param candidat
	 * @param categorie
	 * @throws {@link DataAccessException}
	 * @return {@link List<CandidatReponseQuestion>}
	 */
	public List<CandidatReponseQuestion> affecterQuestionnaire(Candidat candidat, Categorie categorie)throws DataAccessException;

	/**
	 * Renvoie le questionnaire qui a soumis au candidat
	 * @param candidat {@link Candidat}
	 * @return {@link ResultatQuestionnaire}
	 */
	public ResultatQuestionnaire consulterResultat(Candidat candidat);

	
	/**
	 * Compare les reponses du candidat aux reponses correctes 
	 * des questions constituant le formulaire.
	 * 
	 * @param questionnaire {@link Set}
	 * @return {@link ResultatQuestionnaire}
	 */
	@Transactional
	public ResultatQuestionnaire corrigerQuestions(Set<CandidatReponseQuestion> questionnaire);
	
	/**
	 * Met a jour le contenu de la question et/ou ses differentes 
	 * reponses possibles et correctes.
	 * 
	 * @param question {@link Question}
	 * @return {@link Question}
	 */
	public Question modifierQuestion(Question question) throws QrhException;
	
	public boolean identification(String codeAcces);
}
